package com.xz.design.patterns.proxy.jdkProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 获取代理对象的工厂类
 */
public class ProxyFactory {

    // 声明目标对象
    private TrainStation trainStation = new TrainStation();

    public SellTickets getProxyObject(){
        // 返回代理对象
        /**
         *  ClassLoader loader: 类加载器，用于加载代理类
         *  Class<?>[] interfaces: 代理类实现的接口的字节码对象
         *  InvocationHandler h : 代理对象的调用处理程序
         */

        return (SellTickets) Proxy.newProxyInstance(
                trainStation.getClass().getClassLoader(),
                trainStation.getClass().getInterfaces(),
                (proxy, method, args) -> {
                    System.out.println("代售点收取一定的服务费用");
                    Object obj = method.invoke(trainStation, args);
                    return obj;
                }
        );
    }
}
